package com.hmsm.sys.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Service;

import com.hmsm.server.base.BaseService;
import com.hmsm.server.common.CommonUtil;
import com.hmsm.sys.dao.SysConfigDao;
import com.hmsm.sys.po.RoleInfo;
import com.hmsm.sys.po.SysConfig;
import com.hmsm.sys.po.UserInfo;
import com.lzyyj.gmis.base.service.IModuleService;

@Service
public class SysConfigService extends BaseService<SysConfig, Integer, UserInfo, RoleInfo> implements IModuleService {

	public SysConfigDao getSysConfigDao() {
		return (SysConfigDao) baseDao;
	}

	public void setSysConfigDao(SysConfigDao sysConfigDao) {
		baseDao = sysConfigDao;
	}

	public static final String MODULE_ID = "SysConfig";
	
	public static final String MODULE_NAME = "系统配置模块";
	
	/**
	 * 初始化系统配置参数
	 * 
	 * @author zhangshuai
	 */
	public void refreshSysConfig() {
		
		Map<String, String> sysConfigMap = new HashMap<String, String> ();
		List<SysConfig> sysConfigs = getAll();
		for (SysConfig sysConfig : sysConfigs) {
			sysConfigMap.put(sysConfig.getName(), sysConfig.getValue());
		}
		CommonUtil.updateSysConfig(sysConfigMap);
	}

	public List<SysConfig> getAll() {
		List<SysConfig> sysConfigs = getSysConfigDao().query(new SysConfig());
		return sysConfigs;
	}

	@Override
	public String getModuleName() {
		return MODULE_NAME;
	}

	@Override
	public void start() throws Exception {
		refreshSysConfig();
	}

	@Override
	public void stop() {
	}
	
	/**
	 *  @描述:更新name的值
	 *  @方法名称:updateSysConfigParam
	 *  @作者:fengtao
	 *  @创建日期:2014-5-30 上午11:41:35 
	 *  @param parameter
	 *  @return
	 **/
	public void updateSysConfigParam(String name, String parameter){
		getSysConfigDao().updateSysConfigParam(name, parameter);
	}

	public void save(String key, String value, String remark) throws Exception {
		SysConfig sysConfig = new SysConfig();
		sysConfig.setName(key);
		List<SysConfig> list = getSysConfigDao().query(sysConfig);
		if(list!=null&&list.size()>0){
			throw new Exception("要注册的系统配置项已经存在！");
		}
		
		sysConfig.setValue(value);
		sysConfig.setRemark(remark);
		getSysConfigDao().save(sysConfig);
	}

	public void updateByName(SysConfig sysConfigVo, UserInfo currentUser) {
		SysConfig sysConfigPo = null;
		
		SysConfig example = new SysConfig();
		example.setName(sysConfigVo.getName());
		List<SysConfig> list = getSysConfigDao().query(example);
		if(list!=null&&list.size()>0){
			sysConfigPo = list.get(0);
			sysConfigPo.setValue(sysConfigVo.getValue());
			getSysConfigDao().update(sysConfigPo);
		}else{
			sysConfigPo = sysConfigVo;
			getSysConfigDao().save(sysConfigPo);
		}
		
	}

}
